package com.xyzq.webapp.action.ya.data;

import java.util.Date;
import java.util.List;

import com.opensymphony.xwork2.Preparable;
import com.xyzq.model.common.DataDictionary;
import com.xyzq.model.ya.data.Account;
import com.xyzq.model.ya.data.SubAccount;
import com.xyzq.service.common.DataDictionaryManager;
import com.xyzq.service.ya.AccountManager;
import com.xyzq.service.ya.SubAccountManager;
import com.xyzq.webapp.action.BaseAction;

public class SubAccountAction extends BaseAction implements Preparable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -113486712901896163L;
	private Long id;
	private List<DataDictionary> subAccountTypes;
	private List<SubAccount> subAccounts;
	private SubAccount subAccount;
	private AccountManager accountManager;
	private SubAccountManager subAccountManager;
	private DataDictionaryManager dataDictionaryManager;

	public void prepare() throws Exception {
		// TODO Auto-generated method stub
		this.subAccountTypes = this.dataDictionaryManager
				.findByModule("subAccountType");
	}

	public String list() {
		this.subAccounts = this.subAccountManager.getAll();
		this.logUserAction("SubAccountAction", "read all list");
		return SUCCESS;
	}

	public String edit() {
		if (this.id != null) {
			this.subAccount = this.subAccountManager.get(id);
			this.logUserAction("SubAccountAction", "ready edit:"+this.subAccount);
		} else {
			subAccount = new SubAccount();
			this.logUserAction("SubAccountAction", "ready input:"+this.subAccount);
		}
		return SUCCESS;
	}

	public String save() {
		if (cancel != null) {
			return CANCEL;
		}
		boolean isNew = (this.subAccount.getId() == null);
		if (isNew) {
			this.subAccount.setSubTime(new Date());
		} else {
			this.subAccount.setSubTime(this.subAccountManager.get(
					this.subAccount.getId()).getSubTime());
		}
		Account account = this.accountManager.findByAccountId(this.subAccount
				.getAccount().getAccount());
		this.subAccount.setAccount(account);
		this.subAccountManager.save(subAccount);
		String key = (isNew) ? "subAccount.added" : "subAccount.updated";
		saveMessage(getText(key));
		if (!isNew) {
			this.logUserAction("SubAccountAction", "edit:"+this.subAccount);
			return INPUT;
		} else {
			this.logUserAction("SubAccountAction", "save:"+this.subAccount);
			return SUCCESS;
		}
	}

	public Long getId() {
		return id;
	}

	public List<DataDictionary> getSubAccountTypes() {
		return subAccountTypes;
	}

	public AccountManager getAccountManager() {
		return accountManager;
	}

	public SubAccountManager getSubAccountManager() {
		return subAccountManager;
	}

	public DataDictionaryManager getDataDictionaryManager() {
		return dataDictionaryManager;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public void setSubAccountTypes(List<DataDictionary> subAccountTypes) {
		this.subAccountTypes = subAccountTypes;
	}

	public void setAccountManager(AccountManager accountManager) {
		this.accountManager = accountManager;
	}

	public void setSubAccountManager(SubAccountManager subAccountManager) {
		this.subAccountManager = subAccountManager;
	}

	public void setDataDictionaryManager(
			DataDictionaryManager dataDictionaryManager) {
		this.dataDictionaryManager = dataDictionaryManager;
	}

	public void setSubAccount(SubAccount subAccount) {
		this.subAccount = subAccount;
	}

	public SubAccount getSubAccount() {
		return subAccount;
	}

	public void setSubAccounts(List<SubAccount> subAccounts) {
		this.subAccounts = subAccounts;
	}

	public List<SubAccount> getSubAccounts() {
		return subAccounts;
	}

}
